#ifndef PROTREETHREAD_H
#define PROTREETHREAD_H

#include <QThread>
#include <QTreeWidgetItem>
#include <QTreeWidget>

class ProTreeThread : public QThread
{
    Q_OBJECT

public:
    ProTreeThread(const QString& src_path, const QString& dist_path,
                  QTreeWidgetItem* parent_item, int& file_count, QTreeWidget* self, QTreeWidgetItem* root, QObject *parent = nullptr);

    ~ProTreeThread();

protected:
    virtual void run(); // ProTreeThread 线程想做什么事的话，都是写在这个 run 函数里面的

private:
    // 重写的 run 函数调用的时候，是没有传 preItem 的哦，所以下面的 preItem 直接给一个默认的 nullptr 即可
    void CreateProTree(const QString& src_path, const QString& dist_path, QTreeWidgetItem* parent_item,
            int& file_count, QTreeWidget* self, QTreeWidgetItem* root, QTreeWidgetItem* preItem = nullptr);

    QString _src_path;
    QString _dist_path;
    int _file_count;
    QTreeWidgetItem* _parent_item;
    QTreeWidget* _self;
    QTreeWidgetItem* _root;
    bool _bstop = false; // 控制线程退出的变量。不用条件变量等内容了，直接用一个 bool 类型的变量来控制

public slots:
    void SlotCancelProgress();

signals:
    // 使用了 signals 的话，上面就得定义 Q_OBJECT 使用信号和槽的哦
    // 右击项目，执行 qmake 是得刚刚加入的 Q_OBJECT 生效
    void SigUpdateProgress(int file_count);
    void SigFinishProgress(int file_count);
};

#endif // PROTREETHREAD_H
